Portal為不產生parent節點的情形下,將children渲染到DOM節點上面的方法。起手的宣告方式如下:
ReactDOM.createPortal(child, container)
第一個參數child可放入任一個React元素,例如 element、string 或者 fragment。
第二個參數放任一DOM節點。
當parent節點設有overflow: hidden 或者 z-index等樣式時,若需要子節點傳遞到外部的情況時便可以使用,如一些hover效果或是彈窗。
通常當 component 的render方法回傳一個React元素時,此元素會作為 child 被傳進最接近的parent節點中:
render() {
// React 產生一個新的 div 並將 children 渲染 進去
return (
<div>
{this.props.children}
</div>
);
}
使用portal將children傳進parent節點之外:
render() {
// 不產生div(parent節點),將child放入其他任一DOMNode中
return ReactDOM.createPortal(
this.props.children,
DOMNode
);
}